import { userApi } from '@/api/user'
import { useUserStoreWithOut } from '@/stores/modules/user'
import { decryptBase64, getUrlParams } from '@/utils'

/**
 * 应用类
 */
export class App {
  private static instance: App | null = null // 实例化

  // 获取单例
  public static getInstance(): App {
    if (!App.instance) {
      App.instance = new App()
    }
    return App.instance
  }

  /**
   * 初始化
   */
  public async init() {
    // 这里可以进行一些全局的初始化操作，比如获取用户信息等
    const token = getUrlParams('token') || 'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NDQwMjA2NTQsInVzZXJJZCI6IjEiLCJpYXQiOjE2Mjg2NjA2NTQsInVzZXJuYW1lIjoiYWRtaW4ifQ.9pAc5AGruMohJ_oIhk242Y2kCk3OUYLrTTn9y14Hj0w'
    const tenant = getUrlParams('tenant')
    if (tenant) {
      // 如果存在tenant，进行设置
      const userStore = useUserStoreWithOut()
      userStore.setTenant(tenant)
    }
    if (token) {
      // 如果存在authCode，进行登录操作
      const userStore = useUserStoreWithOut()
      userStore.setToken(token)
    } else {
      console.error('No authCode found in URL parameters.')
    }
  }

  /**
   * 处理jwt 验证
   */
  public async handleAuth() {
    const userStore = useUserStoreWithOut()
    const token = userStore.getToken()
    if (token) {
      const userInfoRes = await userApi.getCurrentUserInfo({})
      // userStore.setToken(token)
      // userStore.setIsLogin(true)
      // userStore.setUserInfo(userInfoRes.data)
    } else {
      userStore.setToken('')
      userStore.setIsLogin(false)
      userStore.setUserInfo(null)
    }
  }

  /**
   * 退出登录
   */
  public async logout() {
    const userStore = useUserStoreWithOut()
    userStore.setToken('')
    userStore.setIsLogin(false)
    userStore.setUserInfo(null)
  }

  /**
   * 解析jwt里面的userInfo数据
   * @param token
   * @returns
   */
  parseUserInfoByJwt(token: string) {
    if (token && token.split('.')[1]) {
      return JSON.parse(decryptBase64(token.split('.')[1]))
    }
    return null
  }
}
